using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Extensions;
using Core.Features;
using Core.Resources;

namespace Core.Items.Robots
{
    
    public sealed class KainMk2: RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.KainMk2"/> class.
        /// </summary>
        public KainMk2()
            : base(
            "Kain Mk2",
            Traduction.desc_kain,
            FactionsEnum.Nuimqol,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.Mech,
            new ISlot[]
                {
                    new Slot(0,SlotGroupsEnum.Chassis,SlotTypesEnum.Turret|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(1,SlotGroupsEnum.Chassis,SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(2,SlotGroupsEnum.Chassis,SlotTypesEnum.Turret|SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(3,SlotGroupsEnum.Chassis,SlotTypesEnum.Turret|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(4,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(5,SlotGroupsEnum.Chassis,SlotTypesEnum.Missile, SizesEnum.Small|SizesEnum.Medium),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
                    new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules)
                },
            new IFeature<object>[]
                {
                    new AccumulatorCapacity<double>(2300),
                    new AccumulatorRechargeTime<double>(420),
                    new CpuPerformance<double>(300),
                    new ReactorPerformance<double>(900),
                    new ArmorAmount<double>(2600),
                    new ChemicalResistance<double>(30),
                    new KineticResistance<double>(45),
                    new SeismicResistance<double>(150),
                    new ThermalResistance<double>(10),
                    new ChemicalEHP<double>(0),
                    new KineticEHP<double>(0),
                    new SeismicEHP<double>(0),
                    new ThermalEHP<double>(0),
                    new SurfaceHitSize<double>(8),
                    new InterferenceEmission<double>(6),
                    new InterferenceMinimum<double>(90),
                    new InterferencePeak<double>(335),
                    new InterferenceRadius<double>(300),
                    new LockingRange<double>(275),
                    new LockingTime<double>(12.50),
                    new MaximumTargets<double>(5),
                    new MissileGuidanceFailure<double>(0.1),
                    new SensorStrength<double>(120),
                    new SignalDetection<double>(120),
                    new SignalMasking<double>(80),
                    new ReloadingTime<double>(10),
                    new CargoCapacity<double>(9),
                    new RobotMass<double>(22000),
                    new SlopeCapacity<double>(45),
                    new TopSpeed<double>(64.80),
                    new Volume<double>(19),
                    new DemobilizerResistance<double>(0),
                    new CriticalHitChance<double>(0)
                },
            new IBonusModifier[]
                {
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallMagneticWeaponFalloff, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Small magnetic weapon falloff"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumMagneticWeaponFalloff, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Medium magnetic weapon falloff"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallFirearmFalloff, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Small firearm falloff"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumFirearmFalloff, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Medium firearm falloff"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SmallLaserFalloff, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Small laser falloff"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumLaserFalloff, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Medium laser falloff"}, 
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MediumMagneticWeaponDamage, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Medium magnetic weapon damage"}, 
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.SmallMagneticWeaponCycleTime, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Small magnetic weapon cycle time"},
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MediumMagneticWeaponCycleTime, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Medium magnetic weapon cycle time"},
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.ArmorRepairAmount, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Armor repair amount"}, 
                    new BonusModifier<NuimqolRobotControl>( FeatureTypesEnum.Robot, FeaturesEnum.AccumulatorCapacity, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Accumulator capacity"}, 
                },
            new ICondition<IExtension>[]
                {
                    new ExtensionCondition<NuimqolRobotControl>(7), 
                    new ExtensionCondition<AdvancedRobotics>(1)
                })
        {
        }
        
        
    }
}